public class aaa {
    public static void main(String[] args) {
        //day03_运算符课12

        //隐式转换：小变大
        byte a = 10;//byte占用一个字节：0000 1010
        int b = a;//int占用四个字节：0000 0000 0000 0000 0000 0000 0000 1010
        System.out.println(a);
        //核心：前面补0

        //显式转换：大变小
        int c = 300;//0000 0000 0000 0000 0000 0001 0010 1100
        byte d = (byte)c;//0010 1100->第一位0代表符号为正数，后面7位为010 1100，byte取值范围为-128~127，而300》127，不会溢出
        //且一个字节下数值以补码形式存储，故应当为0101 0011->转化为十进制为44
        System.out.println(d);

        int e = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        byte f = (byte)e;//1100 1000->第一位1代表符号为负数，负数以补码形式存储，故应当为1011 0111->转化为十进制为-56
        //且200 》127，数据会溢出
        System.out.println(f);

        //运算符
        //逻辑与:0为false，1为true;
        int g = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        int h = 10;// 0000 0000 0000 0000 0000 0000 0000 1010
        //逻辑与：两个数的每一位都为1，结果才为1，否则为0
        //0000 0000 0000 0000 0000 0000 0000 1000
        System.out.println(g & h);//输出8

        //逻辑或
        //0为false，1为true
        int i = 200;// 0000 0000 0000 0000 0000 0000 1100 1000
        int j = 10;// 0000 0000 0000 0000 0000 0000 0000 1010
        //逻辑或：两个数的每一位只要有一个为1，结果就为1，否则为0
        //0000 0000 0000 0000 0000 0000 1100 1010
        System.out.println(i | j);//输出202

        //左移
        int k = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        System.out.println(k << 2);//00|00 0000 0000 0000 0000 0000 1100 1000|->00 0000 0000 0000 0000 0000 1100 1000(00)->空位自动补0
        //0000 0000 0000 0000 0000 0011 0010 0000->800

        //右移
        int l = 200;//0000 0000 0000 0000 0000 0000 1100 1000
        System.out.println(k>>2);//|**0000 0000 0000 0000 0000 0000 1100 10|00
        //*补0，最高位原正补0，原负补1
        //0000 0000 0000 0000 0000 0011 0010->50


    }
}